In order to look for errors in software programs (an activity referred to as “debugging”) , some software development tools provide the ability to record the sequence of operations that a processor performed while executing a program. This is referred to as tracing the execution of the program, and the information that is captured is referred to as trace data The trace data may comprise data such as the addresses of operational codes (opcodes) executed by the processor and values of various processor registers at each executed instruction.
Some software programs operate on multiple channels of streaming media (e.g., audio streams, video streams). In many real-time systems, there are multiple tasks, each of which runs at a specific frame rate. Each task, in turn, may support multiple channels that run at the frame rate of the task, each channel processing a different stream of input samples and/or generating a different stream of output samples. When debugging such software programs, one may have to identify a set of instructions, operating on a particular channel of a particular task, which are causing unwanted behavior, such as consuming excessive processor time or resources and thus causing degradation of the overall system performance. Some real-time systems have preemptive multi-tasking which allows the system to continue functioning in such situations by preempting a channel that has missed a real-time deadline, but there will often still be unwanted behavior in the form of glitches in the audio stream or dropped or distorted frames of video, for example. However, it is difficult to debug these real-time systems due to the difficulty in differentiating the various tasks and channels from a trace data capture screen, as the instructions from channel-to-channel may be substantially similar, if not identical.